import { findGoods } from '@/api/goods'
import { useRoute } from 'vue-router'
import { ref, provide } from 'vue'
import msg from '@/components/Message'
import { useStore } from 'vuex'
export function getGoodInfo () {
  const buyNum = ref(1)
  const route = useRoute()
  const good = ref({})
  provide('good', good)

  async function getGood () {
    const { result } = await findGoods(route.params.id)
    console.log('商品详情good', result)
    good.value = result
  }
  getGood()
  return { buyNum, good }
}

export function selSkuInfo (good) {
  // 存储当前选中的sku商品信息
  const currSel = ref(null)

  function selSku (skuInfo) {
    // 判断是否是有效sku信息（不为空）
    // console.log('选中的sku信息：', skuInfo)
    if (skuInfo.skuId) {
      good.value.oldPrice = skuInfo.oldPrice
      good.value.price = skuInfo.price
      good.value.inventory = skuInfo.inventory
      currSel.value = skuInfo
    } else {
      // 清除上次选择
      currSel.value = null
    }
  }
  return { selSku, currSel }
}

export function addCats (good, buyNum, currSel) {
  const store = useStore()
  async function addCat () {
    /**
       * 加入购物车需要满足条件：
       * 1. 选择商品的sku属性=》产生有效的sku商品数据
       * 2. 有效的sku商品数据库存大于0
       */
    if (!currSel.value) {
      return msg({ text: '请选择完整的商品信息！' })
    }
    if (!currSel.value.inventory) {
      return msg({ text: '库存不足！' })
    }
    // 当前要存入购物车的商品数据
    const currGood = {
      id: good.value.id,
      name: good.value.name,
      picture: good.value.mainPictures[0],
      skuId: currSel.value.skuId, // sku属性ID（唯一）
      price: currSel.value.oldPrice, // 价格
      nowPrice: currSel.value.price, // 现价
      attrsText: currSel.value.specsText,
      stock: currSel.value.inventory, // 库存
      selected: true, // 是否在购物车选中
      isEffective: true, // 是否是有效商品
      count: buyNum.value // 购买数量
    }
    // console.log('加入购物车', currGood)

    // 执行加入购物车
    try {
      const res = await store.dispatch('cart/addCartAction', currGood)
      msg({ text: res, type: 'success' })
    } catch (error) {
      msg({ text: '添加失败！' })
      console.dir(error)
    }
  }
  return { addCat }
}
